package com.se2.antiqueexhibition.Service.impl;

import com.se2.antiqueexhibition.Mapper.UserMapper;
import com.se2.antiqueexhibition.Service.UserService;
import com.se2.antiqueexhibition.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.nio.charset.StandardCharsets;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 用户登录
     * @param username 用户名
     * @param password 密码
     * @return 登录成功返回用户对象，失败返回null
     */
    @Override
    public User login(String username, String password) {
        // 密码加密
        String encryptedPassword = DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8));
        // 查询用户
        User user = userMapper.selectByUsername(username);
        // 验证密码
        if (user != null && user.getPassword().equals(encryptedPassword)) {
            return user;
        }
        return null;
    }

    /**
     * 用户注册
     * @param user 用户对象
     * @return 注册成功返回true，失败返回false
     */
    @Override
    public boolean register(User user) {
        // 检查用户名是否已存在
        if (isUsernameExists(user.getUsername())) {
            return false;
        }
        // 检查手机号是否已存在
        if (isPhoneExists(user.getPhone())) {
            return false;
        }
        // 密码加密
        String encryptedPassword = DigestUtils.md5DigestAsHex(user.getPassword().getBytes(StandardCharsets.UTF_8));
        user.setPassword(encryptedPassword);
        // 设置默认状态为启用
        user.setStatus(1);
        // 插入用户
        return userMapper.insertUser(user) > 0;
    }

    /**
     * 检查用户名是否已存在
     * @param username 用户名
     * @return 存在返回true，不存在返回false
     */
    @Override
    public boolean isUsernameExists(String username) {
        return userMapper.countByUsername(username) > 0;
    }

    /**
     * 检查手机号是否已存在
     * @param phone 手机号
     * @return 存在返回true，不存在返回false
     */
    @Override
    public boolean isPhoneExists(String phone) {
        return userMapper.countByPhone(phone) > 0;
    }

    /**
     * 根据ID获取用户信息
     * @param id 用户ID
     * @return 用户对象
     */
    @Override
    public User getUserById(Integer id) {
        return userMapper.selectById(id);
    }

    /**
     * 更新用户信息
     * @param user 用户对象
     * @return 更新成功返回true，失败返回false
     */
    @Override
    public boolean updateUserInfo(User user) {
        return userMapper.updateUserInfo(user) > 0;
    }
}